#pragma once
#include <string>
#include <vector>
#include <map>
#include <memory>
#include <thread>
#include "tool/RingQueue.h"
#include <opencv2/opencv.hpp>
extern "C"
{
#include "libavformat/avformat.h"
#include <libavutil/mathematics.h>
#include <libavutil/time.h>
#include <libavutil/samplefmt.h>
#include <libavcodec/avcodec.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include "libavutil/avconfig.h"
#include <libavutil/imgutils.h>
#include "libswscale/swscale.h"
};

class ImgWriteInfo{
	public:
		int id;			// 摄像机Id(可能是string?)
		int index;		// 图片index
		int type;		// 输入类型??? 0-mat 1-Avframe
		AVFrame *pframe = NULL;
		cv::Mat mat;	// 先当作cvMat 如果ffmpeg可以的话 只能用avframe了
};

class ImgWriter
{
public:
	ImgWriter(const std::string& output) {this->m_output = output;}
	~ImgWriter() {}
	void Run();
	void Push(const ImgWriteInfo& info);
protected:
	void _Run();
private:
	std::thread m_thread;
	// 不知道图片处理速度 同一个以后会不会溢出 先试试看好了
	// 不行的话 就变成 多个 共同处理就是了 或者再套一层
	RingQueue<ImgWriteInfo, 1000> m_imgs;
	std::string m_output;	// 存储目录路径
	bool m_exit = false;	// 是否结束
};
